package com.marketingcenter.service.impl;

import com.marketingcenter.entity.MChooseNCard;
import com.marketingcenter.repository.MChooseNCardRepository;
import com.marketingcenter.service.MChooseNCardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

/**
 * M选N权益卡服务实现类
 */
@Service
public class MChooseNCardServiceImpl extends PromotionServiceImpl<MChooseNCard> implements MChooseNCardService {

    @Autowired
    private MChooseNCardRepository mChooseNCardRepository;

    @Override
    protected JpaRepository<MChooseNCard, Long> getRepository() {
        return mChooseNCardRepository;
    }

    @Override
    public List<MChooseNCard> findByStatus(Integer status) {
        return mChooseNCardRepository.findByStatus(status);
    }

    @Override
    public List<MChooseNCard> findActivePromotions() {
        LocalDateTime now = LocalDateTime.now();
        return mChooseNCardRepository.findByStartTimeLessThanEqualAndEndTimeGreaterThanEqual(now, now);
    }

    @Override
    public boolean purchaseMChooseNCard(Long cardId, Long userId) {
        // 实际实现中需要记录用户购买M选N权益卡的信息
        // 这里仅做简单示例
        MChooseNCard card = findById(cardId);
        if (card != null && card.getStatus() == 1) { // 1表示进行中
            // 检查库存
            if (card.getSoldQuantity() >= card.getTotalQuantity()) {
                return false;
            }
            // 增加已售出数量
            card.setSoldQuantity(card.getSoldQuantity() + 1);
            update(card);
            return true;
        }
        return false;
    }

    @Override
    public boolean selectOptions(Long cardId, Long userId, Long[] optionIds) {
        // 实际实现中需要记录用户选择的选项
        // 这里仅做简单示例
        MChooseNCard card = findById(cardId);
        if (card != null && card.getStatus() == 1) { // 1表示进行中
            // 检查选项数量是否符合要求
            if (optionIds == null || optionIds.length != card.getSelectableCount()) {
                return false;
            }
            // 检查选项是否有效
            // 实际实现中需要验证optionIds是否在card.getOptions()中
            // 实际实现中需要保存用户选择的选项
            return true;
        }
        return false;
    }

    @Override
    public Long[] getUserSelectedOptions(Long cardId, Long userId) {
        // 实际实现中需要查询用户已选择的选项
        // 这里仅做简单返回，实际应用中需要连接到用户选择记录表
        return new Long[0];
    }

}